#ifndef MESSAGEITEM_H
#define MESSAGEITEM_H

#include <QWidget>
#include "message.h"


class MessageItem : public QWidget
{
    Q_OBJECT
public:
    MessageItem(bool isLeft, std::shared_ptr<Message> message);
    // 初始化UI
    void initUI(std::shared_ptr<Message> message);
    // 初始化连接
    void initConnect();
private:
    bool m_isLeft;           // 是否是左侧
};


// 文本消息内容 -- 当窗口改变时，每行显示的文字数目会改变，因此要重写paintEvent
class TextMessageContent : public QWidget
{
    Q_OBJECT
public:
    TextMessageContent(bool isLeft, std::shared_ptr<Message> message);
protected:
    void paintEvent(QPaintEvent* event) override;
private:
    bool m_isLeft;           // 是否是左侧
};

// 图片消息内容 -- 当窗口改变时，图片的显示大小不会改变，因此不用重写paintEvent
class ImageMessageContent : public QWidget
{
    Q_OBJECT
public:
    ImageMessageContent(bool isLeft, std::shared_ptr<Message> message);
private:
    bool m_isLeft;           // 是否是左侧
};

// 文件消息内容 -- 当窗口改变时，文件的显示大小不会改变，因此不用重写paintEvent
class FileMessageContent : public QWidget
{
    Q_OBJECT
public:
    FileMessageContent(bool isLeft, std::shared_ptr<Message> message);
private:
    bool m_isLeft;           // 是否是左侧
};

// 消息内容工厂
class MessageContentFactory
{
    Q_OBJECT
public:
    static QWidget* makeMessageContent(bool isLeft, std::shared_ptr<Message> message);
};
#endif // MESSAGEITEM_H
